//package com.urea.framework.config;
//
//import cn.hutool.core.collection.CollectionUtil;
//import com.alibaba.fastjson2.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.urea.common.exception.ServiceException;
//import com.urea.common.utils.StringUtils;
//import com.urea.system.constants.BusinessConstants;
//import com.urea.system.domain.Order;
//import com.urea.system.domain.PayInfo;
//import com.urea.system.domain.Terminal;
//import com.urea.system.domain.vo.OrderVo;
//import com.urea.system.service.IHardwareService;
//import com.urea.system.service.IOrderService;
//import com.urea.system.service.IPayInfoService;
//import com.urea.system.service.ITerminalService;
//import com.urea.system.service.impl.BannerServiceImpl;
//import lombok.extern.slf4j.Slf4j;
//import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
//import org.eclipse.paho.client.mqttv3.MqttCallback;
//import org.eclipse.paho.client.mqttv3.MqttMessage;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import java.math.BigDecimal;
//import java.math.RoundingMode;
//import java.util.List;
//import java.util.Objects;
//
///**
// * @Author: liuzd
// * @Date: 2023/7/30 17:06
// * @Description:
// */
//@Slf4j
//public class MqttConsumerCallBack implements MqttCallback {
//
//
//    @Autowired
//    private IHardwareService hardwareService;
//    @Autowired
//    private IOrderService orderService;
//    @Autowired
//    private IPayInfoService payInfoService;
//    @Autowired
//    private ITerminalService terminalService;
//    /**
//     * 客户端断开连接的回调
//     * @author liuzd
//     * @param throwable
//     * @return void
//     * @date 2023/7/30 17:14
//     */
//    @Override
//    public void connectionLost(Throwable throwable) {
//        System.out.println("consumer与服务器断开连接，可重连");
//    }
//
//    /**
//     * 消息到达的回调
//     * @author liuzd
//     * @param topic
//     * @param message
//     * @return void
//     * @date 2023/7/30 17:14
//     */
//    @Override
//    public void messageArrived(String topic, MqttMessage message) throws Exception {
//        log.info("#############接收消息主题:{},消息Qos:{},消息内容:{},消息retained:{}#####################",
//                topic,message.getQos(),new String(message.getPayload()),message.isRetained());
//        JSONObject json = JSONObject.parse(new String(message.getPayload()));
//        if (StringUtils.equals(json.getString("event"),"config")){
//            // 配置回复
//            String uid = json.getString("uid");
//            // 获取设备信息
//            Terminal terminal = terminalService.getOne(Wrappers.lambdaQuery(Terminal.class)
//                    .eq(Terminal::getTerminalNo, uid).eq(Terminal::getOnline, "1")
//                    .eq(Terminal::getAssign, "1"));
//            if (Objects.isNull(terminal)){
//                throw new ServiceException("设备未上线或异常!");
//            }
//            // 获取订单信息,
//            Order order = new Order();
//            order.setTerminalId(terminal.getId());
//            order.setStatus(1);
//            order.getParams().put("patMethod",1);
//            List<OrderVo> orderVos = orderService.selectOrderList(order);
//            if (CollectionUtil.isNotEmpty(orderVos)){
//                OrderVo orderVo = orderVos.get(0);
//                // 出货指令
//                hardwareService.run(orderVo.getOrderNo(),orderVo.getCustomerId().toString(),
//                        orderVo.getAmount().multiply(new BigDecimal("100")).toString(),terminal.getTerminalNo());
//            }
//        }else if (StringUtils.equals(json.getString("event"),"result")){
//            // 确认接受到出货指令
//        }else if (StringUtils.equals(json.getString("event"),"fee")){
//            // 结束计费消息
//            JSONObject extra = json.getJSONObject("extra");
//            String orderNo = extra.getString("ser");
//            // 总量
//            String amount = extra.getString("amount");
//            // 单价
//            String price = extra.getString("price");
//            // 总价 分
//            String totalPrice = extra.getString("price_total");
//            // 开始时间
//            String begin = extra.getString("begin");
//            // 结束时间
//            String end = extra.getString("end");
//            // 结束原因 2超时停止 3挂枪停止  4stop指令  5到达消费金额停止
//            String res = extra.getString("res");
//            // 用户id
//            String customerId = extra.getString("card");
//            // 获取订单信息
//            Order order = orderService.getOne(Wrappers.lambdaQuery(Order.class).eq(Order::getOrderNo, orderNo));
//            PayInfo payInfo = payInfoService.getOne(Wrappers.lambdaQuery(PayInfo.class).eq(PayInfo::getOrderNo, orderNo));
//            // 为空 或订单不是加注 直接结束
//            if (Objects.isNull(payInfo)||payInfo.getPayMethod().equals(String.valueOf(BusinessConstants.TRANSACTION_FILL))){
//                log.info("################订单信息异常########################");
//                return;
//            }
//            // 加注升数
//            BigDecimal bigDecimal = new BigDecimal(amount).divide(BigDecimal.valueOf(100L)).setScale(2, RoundingMode.HALF_UP);
//            // 可加注升数
//            BigDecimal fillNo = new BigDecimal(totalPrice).divide(new BigDecimal(price)).setScale(2, RoundingMode.HALF_UP);
//            payInfoService.update(Wrappers.lambdaUpdate(PayInfo.class).eq(PayInfo::getId, payInfo.getId())
//                    .set(PayInfo::getExtraInfo, bigDecimal.toString())
//                    .set(PayInfo::getFillNo, fillNo));
//            LambdaUpdateWrapper<Order> orderWrapper = Wrappers.lambdaUpdate(Order.class).eq(Order::getOrderNo, orderNo);
//            if (new BigDecimal(totalPrice).compareTo(order.getPayAmount().multiply(new BigDecimal("100")))<0){
//            //    orderWrapper.set(Order::getRefundAmount,)
//            }
//           // orderService.update(orderWrapper.set(Order::getRefundAmount))
//
//        }
//
//    }
//
//    /**
//     * 消息发布成功的回调
//     * @author liuzd
//     * @param iMqttDeliveryToken
//     * @return void
//     * @date 2023/7/30 17:14
//     */
//    @Override
//    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
//
//    }
//}